#ifndef MONDE_H
#define MONDE_H

#include <ctime>
#include <cstdlib>
#include <map>
#include <typeinfo>
#include <vector>
#include <string>

#include "Constantes.h"
#include "Position.h"
#include "Arbre.h"
#include "Mouton.h"
#include "Poisson.h"
#include "Male.h"
#include "Femelle.h"
#include "Enfant.h"

using namespace std;

class Monde : vector<Element*>
{
    private:
        /////////////// ATTRIBUTS ///////////////

        map<Position, unsigned> carte;
        unsigned int nbTours;
        string log[7];

    public:
        /////////////// OBJET ///////////////

        Monde();
        void addEnfant(Position * p);
        void transformerAdulte(Enfant *e);
        Element * getElementAt(Position);
        const map<Position, unsigned> & getMap() const;
        map<Position, unsigned> & getMapToModify();
        void jouerUnTour();
        unsigned getNbTours() const;
        int getIndex(Position);

        /////////////// VECTEUR/MONDE ///////////////

        void supprVector(Position p);

        /////////////// VERIFS ///////////////

        bool posIsValid(const Position &) const;

        /////////////// GRAPHIQUE ///////////////

        void afficherCarte() const;
        void afficherElements() const;
        void clearCarte() const;
        void ajoutLog(string _s);
        void clearLog();
        void afficherLog();

        /////////////// DEBUG ///////////////

        void afficher() const;

};

#endif // MONDE_H
